/*
 * Page2.java
 *
 * Created on 08-Jul-2009, 13:35:22
 * Copyright newtonr6
 */
package iffmyexp;

import com.icesoft.faces.component.jsfcl.data.DefaultSelectedData;
import com.sun.rave.faces.data.DefaultSelectItemsArray;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import javax.faces.FacesException;
import com.icesoft.faces.component.ext.HtmlDataTable;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlSelectOneListbox;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import java.io.*;
import javax.faces.component.UIData;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.faces.event.PhaseId;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 */
public class Page2 extends AbstractPageBean {

    HtmlDataTable dtble;
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">
    private int __placeholder;

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
    }

    public static HtmlDataTable inputsTable = new HtmlDataTable();

    public HtmlDataTable getInputsTable() {
        return inputsTable;
    }

    public void setInputsTable(HtmlDataTable hdt) {
        this.inputsTable = hdt;
    }

    public static HtmlOutputText inputName = new HtmlOutputText();

    public HtmlOutputText getinputName() {
        return inputName;
    }

    public void setinputName(HtmlOutputText ot2) {
        this.inputName = ot2;
    }

    public static HtmlOutputText uicType = new HtmlOutputText();

    public HtmlOutputText getuicType() {
        return uicType;
    }

    public void setuicType(HtmlOutputText ot2) {
        this.uicType = ot2;
    }

    public static HtmlOutputText outputText2 = new HtmlOutputText();

    public HtmlOutputText getoutputText2() {
        return outputText2;
    }

    public void setoutputText2(HtmlOutputText ot2) {
        this.outputText2 = ot2;
    }
    public static HtmlOutputText outputText3 = new HtmlOutputText();

    public HtmlOutputText getoutputText3() {
        return outputText3;
    }

    public void setoutputText3(HtmlOutputText ot2) {
        this.outputText3 = ot2;
    }

    public static HtmlOutputText listValues = new HtmlOutputText();

    public HtmlOutputText getlistValues() {
        return listValues;
    }

    public void setlistValues(HtmlOutputText ot2) {
        this.listValues = ot2;
    }
    public static HtmlOutputText valuesHeader = new HtmlOutputText();

    public HtmlOutputText getvaluesHeader() {
        return valuesHeader;
    }

    public void setvaluesHeader(HtmlOutputText vh) {
        this.valuesHeader = vh;
    }
    public static HtmlOutputText valuesText = new HtmlOutputText();

    public HtmlOutputText getvaluesText() {
        return valuesText;
    }

    public static HtmlInputText inputText = new HtmlInputText();

    public HtmlInputText getinputText() {
        return inputText;
    }

    public void setinputText(HtmlInputText it) {
        this.inputText = it;
    }
    public static HtmlInputTextarea inputTextarea = new HtmlInputTextarea();

    public HtmlInputTextarea getinputTextarea() {
        return inputTextarea;
    }

    public void setinputTextarea(HtmlInputTextarea ita) {
        this.inputTextarea = ita;
    }
    public static HtmlSelectOneListbox uicMenu = new HtmlSelectOneListbox();

    public HtmlSelectOneListbox getuicMenu() {
        return uicMenu;
    }

    public void setuicMenu(HtmlSelectOneListbox sm) {
        this.uicMenu = sm;
    }

    public static HtmlInputText valuesInput = new HtmlInputText();

    public HtmlInputText getvaluesInput() {
        return valuesInput;
    }

    public void setvaluesInput(HtmlInputText vi) {
        this.valuesInput = vi;
    }

    public static boolean compsVis = false;

    public boolean getcompsVis() {
        return compsVis;
    }

    public void setcompsVis(boolean cv) {
        this.compsVis = cv;
    }
    public static boolean addVis = true;

    public boolean getaddVis() {
        return addVis;
    }

    public void setaddVis(boolean av) {
        this.addVis = av;
    }
    public static boolean submitVis = false;

    public boolean getsubmitVis() {
        return submitVis;
    }

    public void setsubmitVis(boolean sv) {
        this.submitVis = sv;
    }
    public static boolean valuesVis = false;

    public boolean getvaluesVis() {
        return valuesVis;
    }

    public void setvaluesVis(boolean vv) {
        this.valuesVis = vv;
    }

    // </editor-fold>
    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public Page2() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     *
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here

        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("Page2 Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }

    // </editor-fold>
    // Perform application initialization that must complete
    // *after* managed components are initialized
    // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    public void uic_changed(ValueChangeEvent event) {

        uicType.setValue(uicMenu.getValue());
        
        if (uicMenu.getValue().equals("dropdown") || uicMenu.getValue().equals("checkbox") ||
                uicMenu.getValue().equals("radio")) {
            valuesVis = true;
        } else {
            valuesVis = false;
        }

        String component = null;

        if(uicMenu.getValue().equals("dropdown"))
            component = "Dropdown Menu";

        if(uicMenu.getValue().equals("checkbox"))
            component = "Checkbox";

        if(uicMenu.getValue().equals("radio"))
            component = "Radio Button";

        if(uicMenu.getValue().equals("inputtext"))
            component = "Text Field";

        if(uicMenu.getValue().equals("textarea"))
            component = "Text Area";

        if(uicMenu.getValue().equals("file"))
            component = "File";

        outputText3.setValue(component +" selected");
        valuesHeader.setValue(component + " Values");
    }

    public void add_list_value(ActionEvent e) {

        String value = (String) valuesInput.getText();
        valuesText.setValue(value+" added to list");
    }

    public void button_action(ActionEvent e) throws IOException {
        
        valuesVis = false;
        
        //int index = table.getRowIndex();
        //inputModel hopeq = (inputModel) inputsTable.getRowData();
        //inputModel[] tbd = (inputModel[]) inputsTable.getValue();
        //String tbds = tbd[0].name;
        //String tbdr = tbd[0].restriction;
        //String hope = (String)dataItem.name;
        //Object hope2 = hope.example;
        String name = (String)inputName.getValue();
        String uic = (String)uicType.getValue();
        String restrictionInput = (String) inputText.getText();
        String exampleInput = (String) inputTextarea.getValue();
        //String name = hopeq.name;
        //String type = (String) selectMenu.getValue();
        //System.out.println(name + ", " + type + ", " + restrictionInput + ", " + exampleInput + " " + tbdr);

        outputText3.setValue(name + " added to UI information file.");

        try {
            // Create file
            boolean exists = (new File("wf_data/" + workflow.workflow + ".xml")).exists();
            if (exists == true) {
                File file = new File("wf_data/" + workflow.workflow + ".xml");
                System.out.print("exists");

                FileWriter fstream = new FileWriter(file, true);
                BufferedWriter out = new BufferedWriter(fstream);
                out.write("\t<input>\n\t\t" +
                        "<name>" + name + "</name>\n\t\t" +
                        "<type>" + uic + "</type>\n\t\t" +
                        "<restriction>" + restrictionInput + "</restriction>\n\t\t" +
                        "<example>" + exampleInput + "</example>\n\t" +
                        "</input>\n");

                out.close();

            } else {
                File file = new File("wf_data/" + workflow.workflow + ".xml");
                System.out.print("not exists");

                FileWriter fstream = new FileWriter(file, true);
                BufferedWriter out = new BufferedWriter(fstream);
                out.write("<?xml version=\"1.0\" ?>\n" +
                        "<inputs>\n\t" +
                        "<input>\n\t\t" +
                        "<name>" + name + "</name>\n\t\t" +
                        "<type>" + uic + "</type>\n\t\t" +
                        "<restriction>" + restrictionInput + "</restriction>\n\t\t" +
                        "<example>" + exampleInput + "</example>\n\t" +
                        "</input>\n");
                //Close the output stream
                out.close();
            }
        } catch (Exception ex) {//Catch exception if any
            System.err.println("Error: " + ex.getMessage());
        }

        if(workflowDetails.count==(workflowDetails.inputs.length-1)) {
            Page2.addVis = false;
            Page2.submitVis = true;
        }else
        Page2.inputsTable.setValue(workflowDetails.getcurrInput());

    }

    public void submit() throws IOException {
        System.out.print("submitted");
        File file = new File("wf_data/" + workflow.workflow + ".xml");

        FileWriter fstream = new FileWriter(file, true);
        BufferedWriter out = new BufferedWriter(fstream);
        out.write("</inputs>");
        out.close();
    }
}

